using System;
using System.Web.UI.WebControls;
using EYDIngenieria.ERP.Aplicacion.Gestion;
using EYDIngenieria.ERP.Aplicacion.Mantenedores;
using EYDIngenieria.ERP.ObjetosDeNegocio.Dominio;

public partial class Gestion_Default : System.Web.UI.Page
{
    private readonly MantenedorFamiliaProducto mantenedorFamiliasDeProductos = new MantenedorFamiliaProducto();
    private readonly MantenedorProducto mantenedorProducto = new MantenedorProducto();
    private readonly GestionOrdenDeTrabajoAuxiliar gestionOrdenDeTrabajoAuxiliar = new GestionOrdenDeTrabajoAuxiliar();
    private GestionDetalleOrdenDeTrabajoAuxiliar gestionDetalleOrdenDeTrabajo = new GestionDetalleOrdenDeTrabajoAuxiliar();
    private MantenedorEstadoOrdenDeTrabajo mantenedorEstadoOrdenesDeTrabajo = new MantenedorEstadoOrdenDeTrabajo();
    private GestionOrdenDeTrabajo gestionOrdenDeTrabajo = new GestionOrdenDeTrabajo();
    private EstadoOrdenDeTrabajo ingresado;
    private OrdenDeTrabajoAuxiliar ot;
    private ListItem li;
    private readonly GestionInventario gestionInventario = new GestionInventario();
   
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session.Keys.Count == 0)
            Response.Redirect("../Default.aspx");
       
        if (!IsPostBack)
        {
            Session["otAux"] = new OrdenDeTrabajoAuxiliar();
            gdvDetalle.DataSource = ((OrdenDeTrabajoAuxiliar)Session["otAux"]).Detalle;
            gdvDetalle.DataBind();
            ddlFamilia.DataTextField = "Nombre";
            ddlFamilia.DataValueField = "Id";
            ddlFamilia.DataSource = mantenedorFamiliasDeProductos.Listar();
            ddlFamilia.DataBind();
            li = new ListItem("Seleccione","0");
            ddlFamilia.Items.Insert(0, li);

           

            
        }

        
   }

   


    protected void ddlFamilia_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ddlFamilia.SelectedIndex == 0)
            return;
        ddlProducto.Items.Clear();
        FamiliaProducto f = new FamiliaProducto();
        f.Id = Int16.Parse(((DropDownList)sender).SelectedValue);
        Inventario[] inventario = gestionInventario.ListarInventarioDeFamilia(f);
        ListItem liProducto;
        foreach (Inventario i in inventario)
        {
            liProducto = new ListItem(i.Producto.Codigo + "-" + i.Producto.Nombre, i.Producto.Id.ToString());
            ddlProducto.Items.Add(liProducto);
        }

        ListItem li = new ListItem("Seleccione", "0");
        ddlProducto.Items.Insert(0, li);
    }
    protected void ddlProducto_SelectedIndexChanged(object sender, EventArgs e)
    {
        FamiliaProducto f = new FamiliaProducto();
        f.Id = int.Parse(ddlFamilia.SelectedValue);
        Inventario[] inventario = gestionInventario.ListarInventarioDeFamilia(f);
        double inventarioDelProducto = 0;
        foreach (Inventario i in inventario)
        {
            if (i.Producto.Id == int.Parse(ddlProducto.SelectedValue))
            {
                inventarioDelProducto = i.Saldo;

            }
        }

        Session["StockDeProducto"] = inventarioDelProducto;
        txbCantidad.Text = inventarioDelProducto.ToString();
    }
    protected void btnAgregar_Click(object sender, EventArgs e)
    {
        double stockDeProducto = (double)Session["StockDeProducto"];
        if (double.Parse(txbCantidad.Text) > stockDeProducto)
        {
            rfvCantidad.Text = "Maximo :" + stockDeProducto.ToString();
            rfvCantidad.IsValid = false;
            return;
        }
        else
        {
            rfvCantidad.Text = "Requerido";
            rfvCantidad.IsValid = true;
        }

        DetalleOrdenDeTrabajoAuxiliar detalle = new DetalleOrdenDeTrabajoAuxiliar();
        detalle.Cantidad = int.Parse(txbCantidad.Text);
        detalle.Despachado = detalle.Cantidad;
        detalle.Fecha = DateTime.Now;
        detalle.Producto = mantenedorProducto.Obtener(int.Parse(ddlProducto.SelectedValue));
        detalle.OrdenDeTrabajoAuxiliar = ot;
        ((OrdenDeTrabajoAuxiliar)Session["otAux"]).Detalle.Add(detalle);
        gdvDetalle.DataSource = ((OrdenDeTrabajoAuxiliar) Session["otAux"]).Detalle;
        gdvDetalle.DataBind();
        txbCantidad.Text = string.Empty;
        ddlFamilia.SelectedIndex = -1;
        ddlProducto.Items.Clear();
    }
    protected void lbtEliminar_Click(object sender, EventArgs e)
    {
        int indice = gdvDetalle.SelectedIndex;
        ((OrdenDeTrabajoAuxiliar)Session["otAux"]).Detalle.RemoveAt(indice);
        gdvDetalle.DataSource = ((OrdenDeTrabajoAuxiliar)Session["otAux"]).Detalle;
        gdvDetalle.DataBind();
    }
    protected void gdvDetalle_SelectedIndexChanged(object sender, EventArgs e)
    {
        int indice = gdvDetalle.SelectedIndex;
        ((OrdenDeTrabajoAuxiliar)Session["otAux"]).Detalle.RemoveAt(indice);
        gdvDetalle.DataSource = ((OrdenDeTrabajoAuxiliar)Session["otAux"]).Detalle;
        gdvDetalle.DataBind();
    }
    protected void btnFinalizar_Click(object sender, EventArgs e)
    {
        OrdenDeTrabajoAuxiliar otAux = ((OrdenDeTrabajoAuxiliar) Session["otAux"]);
        otAux.Descripcion = txbDescripcion.Text;
        otAux.Estado = mantenedorEstadoOrdenesDeTrabajo.Buscar("I")[0];
        gestionOrdenDeTrabajoAuxiliar.GuardarOrdenDeTrabajo(otAux);
        foreach (DetalleOrdenDeTrabajoAuxiliar d in otAux.Detalle)
        {
            gestionDetalleOrdenDeTrabajo.DespacharSinOT(d,d.Cantidad);
        }

        txbDescripcion.Text = string.Empty;
        gdvDetalle.DataSource = null;
        gdvDetalle.DataBind();
    }


}
